Módulo:Charm log
-- Implements Template:Charm data -- local p = {} local commas = require('Module:Addcommas')._add local images = { gold = ' ', green = ' ', crimson = ' ', blue = ' ' } function p.main(frame) local args = frame:getParent().args local view = string.lower(args.view or ) local monster = string.gsub(args.monster or '', '_' , ' ') local charm_data = { charms = tonumber(args.charms) or 1, kills = tonumber(args.kills) or 0, gold = tonumber(args.gold) or 0, green = tonumber(args.green) or 0, crimson = tonumber(args.crimson) or 0, blue = tonumber(args.blue) or 0, rare = type(args.rare) 'string', action = args.action, } max_charms = charm_data.kills * charm_data.charms charm_data.any = charm_data.gold + charm_data.green + charm_data.crimson + charm_data.blue charm_data.none = max_charms - charm_data.any local function percent(...) local ret = {} for _, v in ipairs(...) do if kills 0 then table.insert(ret,nil) else table.insert(ret,math.floor(100 * (v / max_charms ) ) ) end end return unpack(ret) end charm_data.goldpercent, charm_data.greenpercent, charm_data.crimsonpercent, charm_data.bluepercent, charm_data.anypercent, charm_data.nonepercent = percent{ charm_data.gold, charm_data.green, charm_data.crimson, charm_data.blue, charm_data.any, missed_charms } return p._main(view,monster,charm_data) end function p._main(view,monster,data) local simple_returns = { kills = true, charms = true, gold = true, green = true, crimson = true, blue = true, any = true, none = true, goldpercent = true, greenpercent = true, crimsonpercent = true, bluepercent = true, anypercent = true, nonepercent = true } if simple_returnsview then return dataview end local min if data.rare then min = 15 else min = 50 end local builder local url = tostring(mw.uri.fullUrl(mw.title.getCurrentTitle().fullText,{ action = 'view', -- For User:Joeytje50/Dropadd.js to look for log_edit = 'true' })) local pls_add if #monster > 1 then pls_add = '' else pls_add = '' end --[=[ Make this mw.html eventually? ]=] if view 'row' then local ret_row = '\n|-'.. '\n| '..monster..''.. '\n| '..commas(data.kills).. '\n| '..data.charms.. '\n| '..data.goldpercent..'%'.. '\n| '..data.greenpercent..'%'.. '\n| '..data.crimsonpercent..'%'.. '\n| '..data.bluepercent..'%'.. '\n|-\n' return ret_row end -- If not any other return -- local function conf_range(_c) if data.kills 0 then return 0 end _c = _c / data.charms local _z = 1.64485 local zsq = _z * _z local _p = _c / data.kills local n1 = 2 * data.kills * _p + zsq local n2 = _z * math.sqrt( zsq + (4 * data.kills * _p * ( 1 - _p) ) ) local _d = 2 * ( data.kills + zsq ) local _l = ( 100 / _d ) * ( n1 - n2 ) local _u = ( 100 / _d ) * ( n1 + n2 ) local rnd if _l < 1 then rnd = 1 else rnd = 0 end local _lr = p._round(_l,rnd) local _ur = p._round(_u,rnd) if _lr _ur then return _lr..'%' else return _lr..'–'.._ur..'%' end end builder = mw.html.create('table') :addClass('wikitable') :addClass('charmtable') :attr('data-monster', monster) :css({ 'text-align' = 'center' }) :tag('tr') :tag('th') :wikitext('No charms') :done() :tag('th') :wikitext(images.gold) :done() :tag('th') :wikitext(images.green) :done() :tag('th') :wikitext(images.crimson) :done() :tag('th') :wikitext(images.blue) :done() :done() :tag('tr') :tag('td') :wikitext( conf_range(data.none) ) :done() :tag('td') :wikitext( conf_range(data.gold) ) :done() :tag('td') :wikitext( conf_range(data.green) ) :done() :tag('td') :wikitext( conf_range(data.crimson) ) :done() :tag('td') :wikitext( conf_range(data.blue) ) :done() :done() :tag('tr') :tag('td') :attr('colspan','5') :css({ 'font-size' = 'smaller', 'text-align' = 'left', 'line-height' = '15px' }) :wikitext('Representa un rango de precisión del 90% basado en una muestra de '..commas(data.kills)..' '..(data.action or 'muertes')..'. '.. data.charms..' '..plural(data.charms,'charm es','charms son')..' dropeado(s) a la ves. '.. pls_add) :done() :done() local ns = mw.title.getCurrentTitle().namespace if ns 0 and data.kills < 250 then return tostring(builder)..'Category:Monstruos con muy poca información de charms' elseif ns 114 then local properties = { ' ' } return tostring(builder)..'Category:Registros de Charms'..mw.getCurrentFrame():preprocess(table.concat(properties,)) else return builder end end function plural(n,s,p) if n 1 then return s else return p or s..'s' end end -- From Wikipedia:Module:Math function p._round(value, precision) local rescale = math.pow(10, precision or 0); return math.floor(value * rescale + 0.5) / rescale; end return p